import java.util.*;

public class Datevelho extends Object{
	private int month;
	private int day;
	private int year;
	private int daysPerMonth[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	
	public Datevelho () {
		Calendar c=new GregorianCalendar();
		month=c.getTime().getMonth();
		day=c.getTime().getDay();
		year=c.getTime().getYear();
	}
	
	public Datevelho (int theDay, int theMonth, int theYear) {
		if (theMonth > 0 && theMonth <=12 ) 
			month=theMonth;
		year=theYear;
		day=checkDay(theDay);
	} // construtor
	
	private int checkDay( int testDay) {
		
		if (testDay > 0 && testDay <= daysPerMonth[month])
			return testDay;
		
		if  (month == 2 && testDay == 29 && 
			(year % 400 == 0 || ( year % 4 == 0 && year % 100 != 0)))
				return testDay;
		return 1; // deixa o objeto com dia consistente
	} // checkDay
	
	/**
	 * Fun��o que calcula a data final a partir de
	 * uma data inicial mais dias; 
	 * @param dias
	 * @return Date
	 */
	public Date somaDias(int dias) {
		/* Se mes = fevereiro e ano = bissexto
		 * 		diasRemanescentes <- 29 - dias
		 * Sen�o
		 * 		diasRemanescentes <- diasDoMes - diaAtual
		 * 
		 * Se diasRemanescentes < dias
		 * 		diaFinal <- dias-diasRemanescentes
		 *  	mesFinal <- mes+1
		 *  
		 *  	Se mesFinal > 12 
		 *  		mesFinal <- 1
		 *  		anoFinal <- ano+1
		 * Sen�o
		 * 	 	diaFinal <- diaAtual+dias;
		 * 
		 * Retorna diaFinal + mesFinal + anoFinal
		 */
		
		int diaFinal;
		int mesFinal=month;
		int anoFinal=year;
		int diasRemanecentes;
		
		
		/* Se o mes atual for fevereiro em um ano 
		 * bissexto usa 29 como o numero total de dias
		 * no mes, sen�o usa o valor padr�o para calcular
		 * o numero de dias restante at� o fim do mes
		 */
		if  (month == 2 && (year % 400 == 0 || 
				( year % 4 == 0 && year % 100 != 0)))
			diasRemanecentes=29-day;	
		else
			diasRemanecentes=daysPerMonth[month]-day;

		if (diasRemanecentes < dias) {
			diaFinal=dias-diasRemanecentes;
	 		mesFinal=month+1;
			if(mesFinal>12) {
				mesFinal=1;
				anoFinal=year+1;
			}
		}
		else
			diaFinal=day+dias;
		
		return new Date(diaFinal,mesFinal,anoFinal);
	}
	
	public int difDays(Date data) {
		int deis=day-data.getDay();
		if ( deis > 0 )
			return deis;
		else
			return -deis;
	}
	
	public String toString() {
		return  day + "/" + month + "/" + year;
	} //toString

	public int getMonth() {
		return month;
	}

	public int getDay() {
		return day;
	}

	public int getYear() {
		return year;
	}
	
} // class Date
